package maquina.gestor.flujo;


import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

import maquina.interfaz.io.LectorTarjeta;

public class GestorTarjeta extends UnicastRemoteObject implements RemoteGestorTarjeta{

	private static final long serialVersionUID = -1120130077410125864L;

	private GestorIO gestorIO;
	
	private LectorTarjeta lector;
	
	GestorTarjeta(GestorIO gestorIO, int port) throws RemoteException {
		
		Registry registry = LocateRegistry.getRegistry("localhost",port);
		
		try {
			
			lector = (LectorTarjeta) registry.lookup("LectorTarjetaMAQUINA");
			
			registry.bind("GestorTarjeta", this);
		
		} catch (Exception e) {
			
			System.out.println("No encuentra al lector en el inicio del dia electoral");
		}		
		
		if(gestorIO != null){
			
			this.gestorIO = gestorIO;
		}
		else{
			throw new NullPointerException("gestorFlujo no pueden ser null");
		}
	}
	
	public void escribirTarjeta(List<String> candidatos){
		
		try {
			
			lector.escribirTarjeta(candidatos);
			
		} catch (RemoteException e) {

			System.out.println("Error invocando lector escribir tarjeta");
		}
	}

	public void ping() {
		
		if(lector != null){
		
			try {
			
				lector.ping(); // llego el true (echo)
			
			} catch (RemoteException e) {
			
				gestorIO.gestionarFallaLector();
			}
		}
		else{
			gestorIO.gestionarFallaLector();
		}
	}

	public void ingresarTarjeta() throws RemoteException {
		
		gestorIO.ingresoNuevaTarjeta();
	}
}
